﻿/*
* 第一類 檢查並返回檢查結果(true or false)
* a-1. ifDigit(str,allowNull)  是否為合法非負整數(examples/ifDigit.html)
* a-2. ifLetter(str,allowNull) 是否為英文字母
* a-3. ifExist(arr,element)    某個元素是否存在於某個數組中
* a-4. ifDay(str,allowNull)    是否為天數
* a-5. ifMonth(str,allowNull)  是否為月份
* a-6. ifYear(str,allowNull)   是否為年份
* a-7. ifYearInRange(str,min_year,max_year,allowNull)  是否為指定範圍內的合法年份
* a-8. ifDate(String,allowNull)   是否為日期
* a-9. ifEmail(String,allowNull)  是否為郵件地址
* a-10. ifPhone(String,allowNull)  是否為電話號碼
* a-11. ifGBK(String,allowNull)    是否包含中文字符
* a-12.ifMoney(String,allowNull)  是否為合法貨幣數字
* a-13 ifMoneyInRange(String,int,int,allowNull) 判斷字符串是否為合法錢數,且是否超過限定範圍
* a-14. ifAvildDate(year,month,day) 判斷是否為合法日期
* a-15. ifSelectedButton(buttonGroup) 判斷buttongroup為名的一組radio中有無被選中的項

* 第二類 檢查後直接報錯
* b-1. isDigit(Object,allowNull)  是否為數字
* b-2. isDigitInMaxLen(object,maxlength,allowNull) 是否為非負整數，且長度在指定範圍內
* b-3. isDigitInRange(object,minValue,maxValue,allowNull) 是否為非負整數，且大小在指定範圍內
* b-4. isLetter(Object,allowNull) 是否為字母
* b-5. isDay(Object,allowNull)    是否為天數
* b-6. isMonth(Object,allowNull)  是否為月份
* b-7. isYear(Object,allowNull)   是否為年份
* b-8. isYearInRange(object,min_year,max_year,allowNull) 是否為指定範圍內的合法年份
* b-9. isDate(Object,allowNull)   是否為日期
* b-10. isEmail(Object,allowNull)  是否為郵件地址
* b-11. isPhone(Object,allowNull)  是否為電話號碼
* b-12. isGBK(Object,allowNull)    是否為中文字符
* b-13. isMoney(Object,allowNull)  是否為合法貨幣數字
* b-14. isMoneyInRange(object,minValue,maxValue,allowNull) 判斷是否合法錢數且是否超過限定額度
* b-15. isLengthInRange(Object, min, max,allowNull) 字符串長度是否在指定長度範圍內
* b-16. checkValidDate(yyObject,mmObject,ddObject,allowNull) 對日期進行全面的檢查
* b-17. checkValidDateRange(yyObject1,mmObject1,ddObject1,allowNull1,yyObject2,mmObject2,ddObject2,allowNull2)
*  檢查起始日期及截止日期
* b-15. showMsg(String, Object)  顯示提示信息String,光標焦點落在Object上,返回false

* 第三類 功能函數，並不報錯
* c-1. getLength(String)  獲取字符長度（每個中文字符為2個字符）
* c-2. trim(String)  去掉字符串前後的空格並返回
* c-3. textsTrim(formname) 將form中所有的text文本進行trim操作。

*/

//日期數組
arr_day = new Array("1", "2", "3", "4", "5", "6", "7", "8", "9", "10",
                  "11", "12", "13", "14", "15", "16", "17", "18", "19", "20",
                  "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31",
                  "01", "02", "03", "04", "05", "06", "07", "08", "09");

//月份數組
arr_mon = new Array("1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12",
                  "01", "02", "03", "04", "05", "06", "07", "08", "09");


//判斷字符串是否為合法非負整數
// a-1 ifDigit(str,allowNull)
function ifDigit(str, allowNull) {
    slen = str.length;
    if (slen == 0) return allowNull;
    for (i = 0; i < slen; i++) {
        cc = str.charAt(i);
        if (cc < "0" || cc > "9") {
            return false;
        }
    }
    return true;
}


//功能:判斷字符串是否都是英文字母
// a-2 ifLetter(str,allowNull)
function ifLetter(str, allowNull) {
    slen = getLength(str);
    if (slen == 0) return allowNull;

    str = str.toUpperCase();
    for (var i = 0; i < slen; i++) {
        if (str.charAt(i) < "A" || str.charAt(i) > "Z")
            return false;
    }
    return true;
}


//功能:判斷某個元素是否存在於數組中
//a-3 ifExist(arr,element) arr:數組；element:某個元素
function ifExist(arr, element) {
    for (var i = 0; i < arr.length; i++) {
        if (element == arr[i]) return true;
    }
    return false;
}


//功能:判斷是否為合法天數
//a-4 ifDay(str,allowNull)
function ifDay(str, allowNull) {
    slen = getLength(str);
    if (slen == 0) return allowNull;
    return ifExist(arr_day, str);
}


//功能:判斷是否為合法月份
//a-5 ifMonth(str,allowNull)
function ifMonth(str, allowNull) {
    slen = getLength(str);
    if (slen == 0) return allowNull;
    return ifExist(arr_mon, str);
}


//功能:判斷是否為合法年份(要求是四位整數，且數字>=1800 並且<=2050)
//a-6 ifYear(str,allowNull)
function ifYear(str, allowNull) {
    return ifYearInRange(str, 1800, 2050, allowNull);
}


//功能:判斷是否為合法年份(要求是四位整數，且數字>=min_year 並且<=max_year)
//a-7 ifYearInRange(str,min_year,max_year,allowNull)
function ifYearInRange(str, min_year, max_year, allowNull) {
    slen = getLength(str);
    if (slen == 0) return allowNull;
    if (slen != 4) return false;
    if (!ifDigit(str, allowNull)) return false;
    if (parseInt(str) < min_year || parseInt(str) > max_year) return false;
    return true;
}


//功能:判斷是否為合法日期格式(要求是八位整數，格式為"yyyymmdd")
//a-8 ifDate(str,allowNull)
function ifDate(str, allowNull) {
    /*
    slen=getLength(str);
    if(slen==0) return allowNull;
    if(slen!=8) return false;
    if(!ifDigit(str,false)) return false;

var year = str.substr(0,4);
    if(!ifYear(year,false)) return false;

var month= str.substr(4,2);
    if(!ifMonth(month,false)) return false;

var day= str.substr(6,2);
    if(!ifDay(day,false)) return false;

  if(!ifAvildDate(year,month,day)) return false;
    return true;
    */
    /*slen=getLength(str);
    if(slen==0) return allowNull;
    if(slen!=10) return false;
   
    var year = str.substr(0,4);
    if(!ifYear(year,false)) return false;
    var s = str.substr(4,1);
    if(s!="-") return false;
     
    var month= str.substr(5,2);
    if(!ifMonth(month,false)) return false;
     
    var s = str.substr(7,1);
    if(s!="-") return false;
   
    var day= str.substr(8,2);
    if(!ifDay(day,false)) return false;

if(!ifAvildDate(year,month,day)) return false;
    return true; */
    slen = getLength(str);
    if (slen == 0) return allowNull;
    if (slen < 8 || slen > 10) return false;
    var year = str.substr(0, 4);
    if (!ifYear(year, false)) return false;
    var s = str.substr(4, 1);
    if (s != "-") return false;
    str = str.substr(5);
    var pos = str.indexOf("-");
    if (pos == -1) return false;
    var month = str.substring(0, pos);
    if (!ifMonth(month, false)) return false;
    var day = str.substr(pos + 1);
    if (!ifDay(day, false)) return false;
    var yearint = parseInt(year);
    var monthint = parseInt(month);
    var dayint = parseInt(day);
    if (yearint % 4 == 0) {
        if (monthint == 2 && dayint > 29) return false;
    }
    else {
        if (monthint == 2 && dayint > 28) return false;
    }

    return true;
}


//判斷字符串是否為合法郵件地址
// a-9 ifEmail(str,allowNull)
function ifEmail(str, allowNull) {
    if (str.length == 0) return allowNull;
    i = str.indexOf("@");
    j = str.lastIndexOf(".");
    if (i == -1 || j == -1 || i > j) return false;
    return true;
}


//判斷url是否為正確的惡地址;
//0-9,a-z
function validateURL(url) {
    //validateURL
    if (url.search(/^[A-Za-z0-9 -]+\.[A-Za-z0-9]+[\/=\?%\-&_~`@[\]\':+!]*([^<>\"\"])*$/) != 0) {
        return false;
        //}else if(url.substring(0,4)=="www."){
        //網址不要前面的www.，如果沒用的話可以註釋掉;
        //return false;
    } else {
        return true;
    }
}


//判斷字符串是否為合法電話號碼
// a-10 ifPhone(str,allowNull)
function ifPhone(str, allowNull) {
    slen = getLength(str);
    if (slen == 0) return allowNull;
    for (i = 0; i < slen; i++) {
        cc = str.charAt(i);
        if ((cc < "0" || cc > "9") && cc != "-" && cc != "+" && cc != "(" && cc != ")" && cc != "/") {
            return false;
        }
    }
    return true;
}


//判斷字符串是否為合法手機號碼
function ifMobile(str, allowNull) {
    slen = getLength(str);
    if (slen == 0) return allowNull;
    if (slen != 11) return false;
    if (!ifDigit(str, allowNull))
        return false;
    if (str.substring(0, 2) != '13')
        return false;
    if (str.charAt(2) == '2')
        return false;
    return true;
}

/*
判斷字符串是否為中國移動手機號碼
*/
function ifChinaMobilePhone(PhoneNumber, allowNull) {
    if (ifMobile(PhoneNumber, allowNull)) {
        if (getLength(PhoneNumber) == 0) return allowNull;
        if (PhoneNumber.charAt(2) >= '4' && PhoneNumber.charAt(2) <= '9') return true;
    }
    return false;
}


//判斷字符串是否包含中文字符
// a-11 ifGBK(str,allowNull)
function ifGBK(str, allowNull) {
    for (var i = 0; i < str.length; i++) {
        var rstr = escape(str.substring(i, i + 1));
        if (rstr.substring(0, 2) == "%u") {
            return true;
        }
    }
    return false;
}


//判斷單雙字節的長度
// 設str某輸入框內的值，若是雙字節則長度多增加一個;
function bytes(str) {
    if (typeof (str) != 'string') {
        str = str.value;
    }
    var len = 0;
    for (var i = 0; i < str.length; i++) {
        if (str.charCodeAt(i) > 127) {
            len++;
        }
        len++;
    }
    return len;
}


//限制最大字符輸入，若輸入框裡的字符長度超出則提示
//判斷單雙字節;
// countLength(object)
function countLength(maxLen, obj) {
    var dLen = 0, sLen = 0, msg = "";
    for (i = 0; i < obj.length; i++) {
        if (obj.charCodeAt(i) > "0" && obj.charCodeAt(i) < "128") {
            sLen += 1;
        } else {
            dLen += 2;
        }
    }
    totalLen = sLen + dLen;
    overLen = totalLen - maxLen;
    if (totalLen > maxLen) {
        msg = ("最多" + maxLen + "字符( " + (maxLen / 2) + "個漢字)，您超出了" + overLen + "個字符，請修改。");
    }
    return msg;
}

//限制最大字符輸入，若輸入框裡的字符長度超出則提示
//判斷單雙字節;
// countLength(object)
maxLen = 100;
function countLength(o) {
    var dLen;
    var sLen;
    dLen = 0; sLen = 0;
    for (i = 0; i < o.value.length; i++) {
        if (o.value.charCodeAt(i) > "0" && o.value.charCodeAt(i) < "128") {
            sLen += 1;
        } else {
            dLen += 2;
        }
    }
    tLen = sLen + dLen;
    lNum = tLen - maxLen;
    if (tLen > maxLen) {
        alert("注意，消息最多" + maxLen + "字符！\n您超出了" + lNum + "個字符，不能繼續輸入！");
    }
}

//判斷字符串是否為合法錢數
// a-12 ifMoney(String)
function ifMoney(str, allowNull) {
    if (str.length == 0) return allowNull;

    if ((pos = str.indexOf(".")) != -1) {
        if (str.length == 1)
            return false;

        if ((pos = str.indexOf(".", pos + 1)) != -1)
            return false;
    }

    for (var i = 0; i < str.length; i++) {
        if ((str.charAt(i) < "0" || str.charAt(i) > "9") && (str.charAt(i) != "."))
            return false;
    }
    return true;
}


//判斷字符串是否為合法錢數,且是否在限定範圍內
// a-13 ifMoneyInRange(str,minValue,maxValue,allowNull)
function ifMoneyInRange(str, minValue, maxValue, allowNull) {
    if (str.length == 0) return allowNull;
    if (!ifMoney(str)) return false;
    if (parseFloat(str) > maxValue) return false;
    if (parseFloat(str) < minValue) return false;
    return true;
}


//判斷是否為合法日期
// a-14 ifAvildDate(year,month,day)
function ifAvildDate(year, month, day) {
    if ((month == 4 || month == 6 || month == 9 || month == 11) && day > 30) {
        return false;
    } else if (month == 2) {
        if (year % 4 > 0 && day > 28) {
            return false;
        } else if (day > 29) {
            return false;
        }
    } else if (day > 31) {
        return false;
    }
    return true;
}


//判斷buttongroup為名的一組radio,checkbox中有無被選中的項
// a-15 ifSelectedButton(buttonGroup)
function ifSelectedButton(buttonGroup) {
    if (typeof buttonGroup == "undefined") return false;

    if (typeof buttonGroup.length == "undefined") {
        if (buttonGroup.checked) return true;
        return false;
    }

    for (var i = 0; i < buttonGroup.length; i++) {
        if (buttonGroup[i].checked) return true;
    }
    return false;
}


//功能: 檢查字段長度是否在指定範圍內
//示例: ifLengthInRange(form1.t1, 4,10,false)
//輸入參數: 需要檢查的表單對像名稱，最小長度，最大長度
//輸出參數: true or false
// a-16 ifLengthInRange(obj, min, max,allowNull)
function ifLengthInRange(obj, min, max, allowNull) {
    //obj.value=trim(obj.value);
    slen = getLength(obj.value);
    if (slen == 0) {
        if (!allowNull) return false;
        return true;
    }

    if (slen < min) return false;
    if (slen > max) return false;
    return true;
}



//功能: 檢查是否為非負整數
//示例: isDigit(String,allowNull)
//輸入參數: 需要檢查的表單對像名稱
//輸出參數: true或出錯信息
// b-1 isDigit(Object,allowNull)
function isDigit(obj, allowNull) {
    obj.value = trim(obj.value);
    slen = getLength(obj.value);
    if (slen == 0) {
        if (!allowNull) return showMsg("必須輸入一個不小於0的整數.", obj);
        return true;
    }
    for (i = 0; i < slen; i++) {
        cc = obj.value.charAt(i);
        if (cc < "0" || cc > "9") return showMsg("輸入不合要求，必須為不小於0的整數.", obj);
    }
    return true;
}


//功能: 檢查是否為非負整數，並且長度不超過指定限制
//示例: isDigitInMaxLen(String obj,int length,boolean allowNull)
//輸入參數: 需要檢查的表單對像名稱,允許的最大長度
//輸出參數: true或出錯信息
// b-2 isDigitInMaxLen(Object,maxlength,allowNull)
function isDigitInMaxLen(obj, maxlength, allowNull) {
    obj.value = trim(obj.value);
    slen = getLength(obj.value);
    if (slen == 0) {
        if (!allowNull)
            return showMsg("必須輸入一個長度不超過" + maxlength + "的整數.", obj);
        return true;
    }
    if (slen > maxlength) return showMsg("長度超過限制，最大長度為" + maxlength + ".", obj);
    for (i = 0; i < slen; i++) {
        cc = obj.value.charAt(i);
        if (cc < "0" || cc > "9") return showMsg("輸入不合要求，必須為不小於0的整數.", obj);
    }
    return true;
}

//b-3 isDigitInRange(object,minValue,maxValue,allowNull)
function isDigitInRange(obj, minVal, maxVal, allowNull) {
    obj.value = trim(obj.value);
    if (obj.value.length == 0) {
        if (!allowNull)
            return showMsg("必須輸入一個大小在" + minVal + " - " + maxVal + "之間的整數.", obj);
        return true;
    }
    if (!isDigit(obj, false)) return false;
    if (obj.value < minVal)
        return showMsg("輸入的數值太小，最小值為" + minVal, obj);
    if (obj.value > maxVal)
        return showMsg("輸入的數值太大，最大值為" + maxVal, obj);
    return true;
}


//功能:判斷字符串是否都是字母
//b-4 isLetter(Object,allowNull)
function isLetter(obj, allowNull) {
    obj.value = trim(obj.value);
    str = obj.value;
    slen = getLength(str);
    if (slen == 0) {
        if (!allowNull) return showMsg("必須有輸入值.", obj);
        return true;
    }
    str = str.toUpperCase();
    for (var i = 0; i < slen; i++) {
        if (str.charAt(i) < "A" || str.charAt(i) > "Z") return showMsg("輸入的必須都是英文字母.", obj);
    }
    return true;
}

//b-5 isDay(Object,allowNull)
function isDay(obj, allowNull) {
    obj.value = trim(obj.value);
    slen = getLength(obj.value);
    if (slen == 0) {
        if (!allowNull) return showMsg("必須輸入一個合法日期(01~31).", obj);
        return true;
    }
    if (!ifDigit(obj.value)) return false;
    if (obj.value < "01" || obj.value > "31") {
        return showMsg("日格式有誤，正確的格式為：DD(01~31),如:02", obj);
    }
    return true;
}

// b-6 isMoneth(Object,allowNull)
function isMonth(obj, allowNull) {
    obj.value = trim(obj.value);
    slen = getLength(obj.value);
    if (slen == 0) {
        if (!allowNull) return showMsg("必須輸入一個合法月份(01~12).", obj);
        return true;
    }
    if (!ifDigit(obj.value)) return false;
    if (slen != 2) return showMsg("必須輸入兩位數字(01~12).", obj);
    if (obj.value < "01" || obj.value > "12") {
        return showMsg("月份格式有誤，正確的格式為：MM(01~12),如:01", obj);
    }
    return true;
}

//建立者：默認
//功能：檢查是否合法年份
//示例：isYear(Object,allowNull)
//輸入參數：被檢查字符串
//輸出參數：true 或 錯誤信息
// b-7 isYear(Object,allowNull)
function isYear(obj, allowNull) {
    return isYearInRange(obj, 1800, 2050, allowNull);
}


// b-8 isYearInRange(object,min_year,max_year,allowNull)
function isYearInRange(obj, min_year, max_year, allowNull) {
    obj.value = trim(obj.value);
    slen = getLength(obj.value);
    if (slen == 0) {
        if (!allowNull) return showMsg("必須輸入一個合法年份(" + min_year + "~" + max_year + ").", obj);
        return true;
    }
    if (slen != 4) return showMsg("輸入的年份不合要求,請輸入一個合理年份(" + min_year + "~" + max_year + ").", obj);
    if (!ifDigit(obj.value, false)) return showMsg("輸入的年份不合要求,請輸入一個合理年份(" + min_year + "~" + max_year + ").", obj);
    if (parseInt(obj.value) < min_year || parseInt(obj.value) > max_year)
        return showMsg("輸入的年份不合要求,請輸入一個合理年份(" + min_year + "~" + max_year + ").", obj);
    return true;
}


//功能：檢查是否合法日期
//示例：isDate(Object)
//輸入參數：被檢查字符串
//輸出參數：true 或 錯誤信息
// b-9 isDate(Object)
function isDate(obj, allowNull) {
    obj.value = trim(obj.value);
    slen = getLength(obj.value);
    if (slen == 0) {
        if (!allowNull) return showMsg("必須輸入一個合法日期，格式為YYYYMMDD,如19990102", obj);
        return true;
    }

    if (!ifDigit(obj.value)) {
        return showMsg("日期輸入格式有誤，不能含有非數字的字符.", obj);
    } else if (slen < 8) {
        return showMsg("日期輸入格式有誤，正確的格式為：YYYYMMDD,如:19990102", obj);
    }
    year = obj.value.substr(0, 4);
    if (!ifYear(year, false)) return showMsg("日期中年份輸入不合理，應在1800~2050之間.", obj);
    month = obj.value.substr(4, 2);
    if (!ifMonth(month, false)) return showMsg("日期中月份輸入不合理，應在01~12之間.", obj);
    day = obj.value.substr(6, 2);
    if (!ifDay(day, false)) return showMsg("日期中日子輸入不合理，應在01~31之間.", obj);
    if (!ifAvildDate(year, month, day)) return showMsg("輸入的日期不存在.", obj);
    return true;
}

//b-10 isEmail(Object)
function isEmail(obj, allowNull) {
    obj.value = trim(obj.value);
    slen = getLength(obj.value);
    if (slen == 0) {
        if (!allowNull) return showMsg("必須輸入一個合理的郵件地址.", obj);
        return true;
    }

    i = obj.value.indexOf("@");
    j = obj.value.lastIndexOf(".");
    // if (! ifGBK(obj)) i = -1;
    if (i == -1 || j == -1 || i > j) return showMsg("郵件地址輸入不合理.", obj);
    return true;
}

// b-11 isPhone(Object)
function isPhone(obj, allwoNull) {
    obj.value = trim(obj.value);
    slen = getLength(obj.value);
    if (slen == 0) {
        if (!allwoNull) return showMsg("必須輸入一個合理的電話號碼.", obj);
        return true;
    }

    for (i = 0; i < slen; i++) {
        cc = obj.value.charAt(i);
        if ((cc < "0" || cc > "9") && cc != "-" && cc != "+" && cc != "(" && cc != ")" && cc != "/") {
            return showMsg("電話號碼含有非法字符.", obj);
        }
    }
    return true;
}

// b-12 isGBK(Object,allowNull)
function isGBK(obj, allowNull) {
    obj.value = trim(obj.value);
    slen = getLength(obj.value);
    if (slen == 0) {
        if (!allowNull) return showMsg("必須輸入一個字串.", obj);
        return true;
    }
    for (var i = 0; i < obj.value.length; i++) {
        var rstr = escape(obj.value.substring(i, i + 1));
        if (rstr.substring(0, 2) == "%u") {
            return true;
        }
    }
    return showMsg("輸入的字串中沒有中文字符", obj);
}


//判斷字符串是否為合法錢數
// b-13 isMoney(Object,allowNull)
function isMoney(obj, allowNull) {
    obj.value = trim(obj.value);
    slen = getLength(obj.value);
    if (slen == 0) {
        if (!allowNull) return showMsg("必須輸入一個合理錢數.", obj);
        return true;
    }

    if (ifMoney(obj.value, false)) {
        return true;
    } else {
        return showMsg("不是合理的錢數.", obj);
    }
    return true;
}


//判斷是否合法錢數且是否超過限定額度
//b-14 isMoneyInRange(obj,minValue,maxValue)
function isMoneyInRange(obj, minValue, maxValue, allowNull) {
    obj.value = trim(obj.value);
    slen = getLength(obj.value);
    if (slen == 0) {
        if (!allowNull) return showMsg("必須輸入一個合理錢數.", obj);
        return true;
    }

    if (!ifMoneyInRange(obj.value, minValue, maxValue, false)) {
        return showMsg("輸入的錢數不合理，要求值在" + minValue + "~" + maxValue + "之間.", obj);
    }
    return true;
}


//功能: 檢查字段長度是否在指定範圍內
//示例: isLengthInRange(form1.t1, 4,10)
//輸入參數: 需要檢查的表單對像名稱，最小長度，最大長度
//輸出參數: true
// b-15 isLengthInRange(obj, min, max,allowNull)
function isLengthInRange(obj, min, max, allowNull) {
    //obj.value=trim(obj.value);
    slen = getLength(obj.value);
    if (slen == 0) {
        if (!allowNull) return showMsg("必須有輸入值.", obj);
        return true;
    }

    if (slen < min) return showMsg("請至少輸入 " + min + " 個字符.", obj);
    if (slen > max) return showMsg("請最多輸入 " + max + " 個字符.", obj);
    return true;
}



//功能:全選或取消全選form裡的checkbox，參數1即為全選,否則即取消;
function checkall(obj, parm) {//全選or取消全選;
    for (var i = 0; i < obj.elements.length; i++) {
        if (obj.elements[i].tagName.toLowerCase() == "input" && obj.elements[i].type == "checkbox") {
            if (parm == 1) {//check all checkbox input;
                obj.elements[i].checked = true;
            } else {
                obj.elements[i].checked = false;
            }

        }
    }
}


//功能:反選form裡的checkbox;
function reverseCheck(obj) {
    for (var i = 0; i < obj.elements.length; i++) {
        if (obj.elements[i].tagName.toLowerCase() == "input" && obj.elements[i].type == "checkbox") {
            obj.elements[i].checked = obj.elements[i].checked ? false : true;
        }
    }
}


//功能:判斷form裡的元素是否已經有child這樣的值;
//更多限制可以通過element的tagName,type,name等來判斷;
function isExistElement(child, obj) {
    for (var i = 0; i < obj.elements.length; i++) {
        //if(obj.elements[i].tagName.toLowerCase()=="input" && obj.elements[i].type=="checkbox"){
        if (obj.elements[i].value == child) return true;
        //}
    }
    return false;
}


//功能:對日期進行全面的檢查
//輸入參數:yyObject:年的object;mmObject:月的object;ddObject:日的object;
//輸入參數:allowNull:true允許日期為空;false:必須選擇日期
//輸出參數:ture of false;
// b-16 checkValiDate(mmObject,ddObject,yyObject,allowNull)
function checkValidDate(yyObject, mmObject, ddObject, allowNull) {
    if (allowNull) {
        if (!(((!yyObject.options[0].selected) && (!mmObject.options[0].selected) && (!ddObject.options[0].selected)) || ((yyObject.options[0].selected) && (mmObject.options[0].selected) && (ddObject.options[0].selected))))
            return showMsg("日期必須全部選擇或者全部不選擇!", yyObject);
    } else {
        if (yyObject.options[0].selected) {
            return showMsg("請選擇日期的年!", yyObject);
        }
        if (mmObject.options[0].selected) {
            return showMsg("請選擇日期的月!", mmObject);
        }
        if (ddObject.options[0].selected) {
            return showMsg("請選擇日期的日!", ddObject);
        }
    }

    if (!yyObject.options[0].selected) {
        var my_year = yyObject[yyObject.selectedIndex].value;
        var my_month = mmObject[mmObject.selectedIndex].value;
        var my_day = ddObject[ddObject.selectedIndex].value;

        if (!ifAvildDate(my_year, my_month, my_day))
            return showMsg("選擇的日期不合法!", ddObject);
    }
    return true;
}



//功能:對日期進行全面的檢查
//輸入參數:yyObject1:其始年的object;mmObject1:其始月的object;ddObject1:其始日的object;
//輸入參數:allowNull1:起始日期true允許日期為空;false:必須選擇日期
//輸入參數:yyObject2:截止年的object;mmObject2:截止月的object;ddObject2:截止日的object;
//輸入參數:allowNull2:截止日期true允許日期為空;false:必須選擇日期
//輸出參數:ture of false;
// b-17 checkValidDateRange(mmObject1,ddObject1,yyObject1,allowNull1,mmObject2,ddObject2,yyObject2,allowNull2)
function checkValidDateRange(yyObject1, mmObject1, ddObject1, allowNull1, yyObject2, mmObject2, ddObject2, allowNull2) {
    if (!checkValidDate(mmObject1, ddObject1, yyObject1, allowNull1)) return false;
    if (!checkValidDate(mmObject2, ddObject2, yyObject2, allowNull2)) return false;

    if ((!yyObject1.options[0].selected) && (!yyObject2.options[0].selected)) {
        date1 = new Date(yyObject1 - 1900, mmObject1 - 1, ddObject1);
        date2 = new Date(yyObject2 - 1900, mmObject2 - 1, ddObject2);
        if (date1 > date2) {
            return showMsg("起始日期不能大於截止日期.", yyObject1);
        }
    }
    return true;
}



//功能:顯示提示信息Msg,光標焦點落在Obj上,返回false
//     主要用於檢查必要字段是否正確
//示例:showMsg("用戶名不能為空.",myform.username)
//輸入參數:Msg(提示信息) Obj(光標焦點對像)
//輸出參數:false
// b-18 showMsg(String, Object)
function showMsg(Msg, Obj) {
    alert(Msg);
    Obj.focus();
    return false;
}


//功能:顯示提示信息Msg,光標焦點落在Obj上
//     主要用於檢查必要字段是否正確
//示例:showMsg2("用戶名不能為空.",myform.username)
//輸入參數:Msg(提示信息) Obj(光標焦點對像)
//輸出參數:false
// b-19 showMsg2(String, Object)
function showMsg2(Msg, Obj) {
    alert(Msg);
    Obj.focus();
    return;
}

/**
以下是第三類
*/
//加入了漢字的長度判斷
// c-1 getLength(String)
function getLength(str) {
    var templen = str.length;
    if (navigator.appName == 'Netscape') return templen;
    for (var i = 0; i < str.length; i++) {
        var rstr = escape(str.substring(i, i + 1));
        if (rstr.substring(0, 2) == "%u") {
            templen++;
        }
    }
    return templen;
}


//功能:去掉字符串前後的空格並返回
//輸入參數:inputStr(待處理的字符串)
//輸出參數:inputStr(處理後的字符串)
// c-2 trim(String)
function trim(inputStr) {
    var result = inputStr;
    while (result.substring(0, 1) == " ") {
        result = result.substring(1, result.length);
    }

    while (result.substring(result.length - 1, result.length) == " ") {
        result = result.substring(0, result.length - 1);
    }

    return result;
}


//功能:去掉字符串前後的空格並返回
//輸入參數:inputStr(待處理的字符串)
//輸出參數:inputStr(處理後的字符串)
// c-2 string.trim();
String.prototype.trim = function() {
    return this.replace(/(^\s*)|(\s*$)/g, "");
}

//Trim,參數String
function trim(myStr) {
    var pos1 = -1;
    var pos2 = -1;
    for (var i = 0; i < myStr.length; i++) {
        if (myStr.charAt(i) != ' ' && pos1 < 0) pos1 = i;
        if (myStr.charAt(myStr.length - i - 1) != ' ' && pos2 < 0) pos2 = myStr.length - i;
    }
    if (pos1 < 0 || pos2 < 0) return ("");
    return (myStr.substring(pos1, pos2));
}

function trim(s) {
    if (s == null) {
        return s;
    }
    var i;
    var beginIndex = 0;
    var endIndex = s.length - 1;

    for (i = 0; i < s.length; i++) {
        if (s.charAt(i) == ' ' || s.charAt(i) == '　') {
            beginIndex++;
        }
        else {
            break;
        }
    }
    for (i = s.length - 1; i >= 0; i--) {
        // if (s.charAt(i) == ' ' || s.charAt(i) == '　' || s.charAt(i)=='\r' || s.charAt(i)=='\n')

        if (s.charAt(i) == ' ' || s.charAt(i) == '　') {
            endIndex--;
        }
        else {
            break;
        }
    }
    if (endIndex < beginIndex) {
        return "";
    }
    return s.substring(beginIndex, endIndex + 1);
}

//功能:將form中所有的text文本進行trim操作。
//輸入參數:myform(form名)
//輸出參數:無
// c-3 textTrim(form名稱)
function textsTrim(myform) {
    for (var i = 0; i < myform.elements.length; i++) {
        var etype = myform.elements[i].type;
        if (etype = "text") {
            myform.elements[i].value = trim(myform.elements[i].value);
        }
    }
}



//功能:將form某一input框或textarea裡的內容copy至粘貼板
//輸入參數:myform(input對像名稱)
//輸出參數:無
function copyCode(obj) {
    var rng = document.body.createTextRange();
    rng.moveToElementText(obj);
    rng.scrollIntoView();
    rng.select();
    rng.execCommand("Copy");
    rng.collapse(false);
}


//功能:以HTML頁面方式運行某一input或textarea裡的內容//firefox下可能不支持
//輸入參數:myform(input對像名稱)
//輸出參數:無
function runCode(obj) {
    var winname = window.open('', "_blank", '');
    winname.document.open('text/html', 'replace');
    winname.document.writeln(obj.value);
    winname.document.close();
}


//功能:將form某一input框或textarea裡的內容另存為//firefox下可能不支持
//輸入參數:myform(input對像名稱)
//輸出參數:無
function saveCode(obj) {
    var winname = window.open('', '_blank', 'top=10000');
    winname.document.open('text/html', 'replace');
    winname.document.writeln(obj.value);
    winname.document.execCommand('saveas', '', 'code.htm');
    winname.close();
}



//功能:相當於java裡的replaceAll，可以替換字符裡的包含的某個全部字符串
//輸入參數:被替換的字符串與要替換的字符串
//輸出參數:無
String.prototype.replaceAll = strReplace;
function strReplace(findText, replaceText) {
    var str = new String(this);
    while (str.indexOf(findText) != -1) {
        str = str.replace(findText, replaceText);
    }
    return str;
}
String.prototype.replaceAll = strreplace;
function strreplace(str1, str2) {
    return this.replace(new RegExp(str1, "g"), str2);
}
//正則表達式全部替換字符，與tempStr.replaceAll()相當;


//功能:將form某一textarea裡的內容裡的br清除;將回車替換成<br />之類
//輸入參數:myform(input對像名稱)
//輸出參數:無
function cleanBR() {
    var area = document.getElementsByTagName('TEXTAREA');
    for (var i = 0; i < area.length; i++) {
        area[i].value = area[i].value.replace(/<br \/>/ig, '');
        area[i].value = area[i].value.replace(/(\xA0\x20){4}/ig, '\t');
        area[i].value = area[i].value.replace(/\xA0\x20\xA0/ig, '   ');
        area[i].value = area[i].value.replace(/\xA0\xA0/ig, '  ');
    }
}


//功能:將屬性rel為blank的鏈接用window.open()的方式打開。
//比如<a href="#" rel="blank"></a>
//輸入參數:myform(input對像名稱)
//輸出參數:無
function tBlank() {
    var aLinks = document.getElementsByTagName("a");
    for (var i = 0; i < aLinks.length; i++) {
        if (aLinks[i].getAttribute("rel") == "blank") {
            //alert(aLinks[i].getAttribute("href"));
            aLinks[i].target = "_blank";
        }
    }
}



//功能:檢查和設置數字
//比如<a href="#" rel="nubmer"></a>
//輸入參數:myform(input對像名稱)
//輸出參數:無
function setNum() {
    var inp = document.getElementsByTagName("input");
    //alert(inp.length);
    for (var i = 0; i < inp.length; i++) {
        if (inp[i].getAttribute("rel") == "number") {
            // checkNum(inp[i]);
            //inp[i].onmouseover=
            eval("checkNum(inp[i])");
            //alert(inp[i].value);
            //inp[i].onblur=eval (alert("d"));
        }
    }
}


//功能:驗證是否為數字與isNaN()相反
//輸出參數:返回true或者false
function isNum(obj) {
    for (var i = 0; i < obj.value.length; i++) {
        if (obj.value.charAt(i) < "0" || obj.value.charAt(i) > "9") {
            return false;
        }
    }
    return true;
}


//正則表達式去除左右空格。
//返回去除後的字符串
function trim(s) {
    return s.replace(/^\s*/, "").replace(/\s*$/, "");
}


//正則表達式Email的驗證
//驗證是否含有@.等
function validateEmail(email) {
    var myReg = /^[_a-z0-9]+@([_a-z0-9]+\.)+[a-z0-9]{2,3}$/;
    if (myReg.test(email) == false) {
        return false;
    }
    return true;
}


//正則表達式電話的驗證
//驗證是否含有@.等
function validatePhone(phone) {
    var myReg = /(^[0-9]{3,4}\-[0-9]{5,8}$)|(^[0-9]{5,12}$)|(^\([0-9]{3,4}\)[0-9]{5,8}$)|(^0{0,1}13[0-9]{9}$)/;
    if (myReg.test(phone) == false) {
        return false;
    }
    return true;
}


//驗證字符長度是否超出某個值
//返回true或false
function validateMaxLength(v, maxlen) {
    if (trim(v).length > maxlen) {
        return false;
    }
    return true;
}

/*
檢查18位身份證最後一位即校驗碼是否正確
1，Σ(a[i]*W[i]) mod 11 ( i = 2, 3, , 18 ) (1) ;
2，加權因子分別為 Wi: 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 ；
3，將前17位號碼分別乘以各自的加權因子,再求和除以11,再取餘數。
4，用餘數對應下方的校驗碼
5，Y餘數:  0 1 2 3 4 5 6 7 8 9 10 ;
6，校驗碼: 1 0 X 9 8 7 6 5 4 3 2 ;
*/
var ai = new Array(); //用戶的身份證號碼數組;
var wi = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]; //17位數對應的加權因子，自左至右;
var yi = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; //餘數;
var vi = ["1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"]; //餘數對應的校驗碼;
var r; //最終的校驗碼;
var sum; //和
var y; //餘數

//用法:getVerifyCode(this.form.number)
//返回正確的驗證碼;
function getVerifyCode(num) {//17位的號碼請求，則可以返回檢驗碼;
    r = 0; y = 0; sum = 0;
    var v = num;
    if (typeof (num) != "undefined" && typeof (num) != "string" && num.type == "text") v = num.value;
    v = v.toUpperCase(); var vl;
    if (v.length == 18)
        vl = v.length - 1;
    else
        vl = v.length;
    if (vl != 17) {
        alert("請求號碼不正確"); return;
    }
    for (var i = 0; i < vl; i++) {
        ai[i] = v.charAt(i);
        sum += ai[i] * wi[i]; //身份證號碼分別乘以加權因子再求和;  
    }
    y = sum % 11;
    r = vi[y]; //校驗碼中的第y個即時校驗碼;
    return r; //返回18位身份證的校驗碼;
}

//用法:checkIdVerifyCode(this.form.number)
//返回true或false;
function checkIdVerifyCode(o) {
    var v = o;
    if (typeof (o) != "undefined" && typeof (o) != "string" && o.type == "text") v = o.value;
    var num18 = v.substr(17, 1);
    /*//號碼驗證不一定需要;
    var num17 = v.substring(0,17);
    if(v.length != 18){
    //alert("請輸入18位身份證號碼");
    return false;
    }else if(!isNaN(v)){
    //alert("18位全是數字");
    }else if( num18.toUpperCase() == "X" && !isNaN( num17 )){
    //alert("第18位數字是X，前17位是數字");
    }else{
    //alert("請輸入有效的身份證號碼");
    return false;
    }*/
    if (getVerifyCode(v) == num18)
        return true;
    else
        return false;
}

// get absolute Left position

//返回對像位於窗口的絕對左邊距離
function getAbsoluteLeft(ob) {
    if (!ob) { return null; }
    var obj = ob;
    var objLeft = obj.offsetLeft;
    while (obj != null && obj.offsetParent != null && obj.offsetParent.tagName != "BODY") {
        objLeft += obj.offsetParent.offsetLeft;
        obj = obj.offsetParent;
    }
    return objLeft;
}

// get absolute TOP position

//返回對像位於窗口的絕對上邊距離
function getAbsoluteTop(ob) {
    if (!ob) { return null; }
    var obj = ob;
    var objTop = obj.offsetTop;
    while (obj != null && obj.offsetParent != null && obj.offsetParent.tagName != "BODY") {
        objTop += obj.offsetParent.offsetTop;
        obj = obj.offsetParent;
    }
    return objTop;
}

// get absolute TOP position

//檢查顏色值是否為真;
//用法: if( isAllNum16("#000000") )alert("合法顏色");
function isNum16(ch) {
    if (ch >= '0' && ch <= '9') return true;
    if (ch >= 'A' && ch <= 'F') return true;
    if (ch >= 'a' && ch <= 'f') return true;
    return false;
}
function isAllNum16(str1) {//判斷顏色值。除第一個字符#外的任一個值是否大於等a,A,0,小於等於f,F,9，否則報錯。
    for (i = 1; i < str1.length; i++) {
        if (!isNum16(str1.charAt(i))) {
            return false;
        }
    }
    return true;
}

/**
* Read the JavaScript cookies tutorial at:
*   [url]http://www.netspade.com/articles/javascript/cookies.xml[/url]
*/

/**
* Sets a Cookie with the given name and value.
*
* name       Name of the cookie
* value      Value of the cookie
* [expires]  Expiration date of the cookie (default: end of current session)
* [path]     Path where the cookie is valid (default: path of calling document)
* [domain]   Domain where the cookie is valid
*              (default: domain of calling document)
* [secure]   Boolean value indicating if the cookie transmission requires a
*              secure transmission
*/
function setCookie(name, value, expires, path, domain, secure) {//時間，域名，路徑等可以根據需要來設定
    //var path="/";
    //var domain="baidu.com";
    var expdate = new Date();
    expdate.setTime(expdate.getTime() + (365 * 24 * 120)); //設為1年時效
    expires = expdate;

    document.cookie = name + "=" + escape(value) +
        ((expires) ? "; expires=" + expires.toGMTString() : "") +
        ((path) ? "; path=" + path : "") +
        ((domain) ? "; domain=" + domain : "") +
        ((secure) ? "; secure" : "");
}

function readCookie(name) {
    //http://www.quirksmode.org/js/cookies.html#link7
    var nameEQ = name + "=";
    var ca = document.cookie.split(';');
    for (var i = 0; i < ca.length; i++) {
        var c = ca[i];
        while (c.charAt(0) == ' ') c = c.substring(1, c.length);
        if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length);
    }
    return null;
}
/**
* Gets the value of the specified cookie.
*
* name  Name of the desired cookie.
*
* Returns a string containing value of specified cookie,
*   or null if cookie does not exist.
*/
function getCookie(name) {
    var dc = document.cookie;
    var prefix = name + "=";
    var begin = dc.indexOf("; " + prefix);
    if (begin == -1) {
        begin = dc.indexOf(prefix);
        if (begin != 0) return null;
    }
    else {
        begin += 2;
    }
    var end = document.cookie.indexOf(";", begin);
    if (end == -1) {
        end = dc.length;
    }
    return unescape(dc.substring(begin + prefix.length, end));
}

/**
* Deletes the specified cookie.
*
* name      name of the cookie
* [path]    path of the cookie (must be same as path used to create cookie)
* [domain]  domain of the cookie (must be same as domain used to create cookie)
*/
function deleteCookie(name, path, domain) {
    if (getCookie(name)) {
        document.cookie = name + "=" +
            ((path) ? "; path=" + path : "") +
            ((domain) ? "; domain=" + domain : "") +
            "; expires=Thu, 01-Jan-70 00:00:01 GMT";
    }
}


/*
1.Trim(str)－－去除字符串兩邊的空格
2.XMLEncode(str)－－對字符串進行XML編碼
3.ShowLabel(str,str)－－鼠標提示功能（顯示字符，提示字符）
4.IsEmpty(obj)－－驗證輸入框是否為空
5.IsInt(objStr,sign,zero)－－驗證是否為整數
6.IsFloat(objStr,sign,zero)－－驗證是否為浮點數
*/
/*字符串操作
Trim(string):去除字符串兩邊的空格
*/
/*　　１．LTrim(string):去除左邊的空格*/
function LTrim(str) {
    var whitespace = new String(" \t\n\r"); var s = new String(str);
    if (whitespace.indexOf(s.charAt(0)) != -1) {
        var j = 0, i = s.length;
        while (j < i && whitespace.indexOf(s.charAt(j)) != -1) { j++; }
        s = s.substring(j, i);
    }
    return s;
}

/*　　２．RTrim(string):去除右邊的空格*/
function RTrim(str) {
    var whitespace = new String(" \t\n\r");
    var s = new String(str);

    if (whitespace.indexOf(s.charAt(s.length - 1)) != -1) {
        var i = s.length - 1;
        while (i >= 0 && whitespace.indexOf(s.charAt(i)) != -1) {
            i--;
        }
        s = s.substring(0, i + 1);
    }
    return s;
}

/*　　３．Trim(string):去除前後空格*/
function Trim(str) {
    return RTrim(LTrim(str));
}
/*
　　XMLEncode(string):對字符串進行XML編碼
*/
function XMLEncode(str) {
    str = Trim(str);
    str = str.replace("&", "&amp;");
    str = str.replace("<", "&lt;");
    str = str.replace(">", "&gt;");
    str = str.replace("'", "&apos;");
    str = str.replace("\"", "&quot;");
    return str;
}
/*驗證類函數*/
function IsEmpty(obj) {
    obj = document.getElementsByName(obj).item(0);
    if (Trim(obj.value) == "") {
        alert("字段不能為空。");
        if (obj.disabled == false && obj.readOnly == false) {
            obj.focus();
        }
    }
}

/*　　IsInt(string,string,int or string):(測試字符串,+ or - or empty,empty or 0)
　　功能：判斷是否為整數、正整數、負整數、正整數+0、負整數+0*/
function IsInt(objStr, sign, zero) {
    var reg;
    var bolzero;

    if (Trim(objStr) == "") {
        return false;
    }
    else {
        objStr = objStr.toString();
    }

    if ((sign == null) || (Trim(sign) == "")) { sign = "+-"; }
    if ((zero == null) || (Trim(zero) == "")) { bolzero = false; } else { zero = zero.toString(); if (zero == "0") { bolzero = true; } else { alert("檢查是否包含0參數，只可為(空、0)"); } }
    switch (sign) {
        case "+-":
            //整數
            reg = /(^-?|^\+?)\d+$/;
            break;
        case "+":
            if (!bolzero) {
                //正整數
                reg = /^\+?[0-9]*[1-9][0-9]*$/;
            }
            else {
                //正整數+0
                //reg=/^\+?\d+$/;
                reg = /^\+?[0-9]*[0-9][0-9]*$/;
            }
            break;
        case "-":
            if (!bolzero) {
                //負整數
                reg = /^-[0-9]*[1-9][0-9]*$/;
            }
            else {
                //負整數+0
                //reg=/^-\d+$/;
                reg = /^-[0-9]*[0-9][0-9]*$/;
            }
            break;
        default:
            alert("檢查符號參數，只可為(空、+、-)");
            return false;
            break;
    }
    var r = objStr.match(reg);
    if (r == null) {
        return false;
    }
    else {
        return true;
    }
}
/*
　　IsFloat(string,string,int or string):(測試字符串,+ or - or empty,empty or 0)
　　功能：判斷是否為浮點數、正浮點數、負浮點數、正浮點數+0、負浮點數+0
*/
function IsFloat(objStr, sign, zero) {
    var reg;
    var bolzero;

    if (Trim(objStr) == "") {
        return false;
    }
    else {
        objStr = objStr.toString();
    }

    if ((sign == null) || (Trim(sign) == "")) {
        sign = "+-";
    }

    if ((zero == null) || (Trim(zero) == "")) {
        bolzero = false;
    } else {
        zero = zero.toString();
        if (zero == "0") {
            bolzero = true;
        } else {
            alert("檢查是否包含0參數，只可為(空、0)");
        }
    }
    switch (sign) {
        case "+-":
            //浮點數
            reg = /^((-?|\+?)\d+)(\.\d+)?$/;
            break;
        case "+":
            if (!bolzero) {
                //正浮點數
                reg = /^\+?(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$/;
            }
            else {
                //正浮點數+0
                reg = /^\+?\d+(\.\d+)?$/;
            }
            break;
        case "-":
            if (!bolzero) {
                //負浮點數
                reg = /^-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$/;
            }
            else {
                //負浮點數+0
                reg = /^((-\d+(\.\d+)?)|(0+(\.0+)?))$/;
            }
            break;
        default:
            alert("檢查符號參數，只可為(空、+、-)");
            return false;
            break;
    }

    var r = objStr.match(reg);
    if (r == null) { return false; } else { return true; }
}
